package com.example.demo.colntorller;

import com.example.demo.common.Result;
import com.example.demo.dto.TestRequestDTO;
import com.example.demo.entity.User;
import com.example.demo.service.TestServiceImpl;
import com.example.demo.service.UserService;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 控制器类用于处理与测试相关的HTTP请求。
 */
@RestController
@RequestMapping("/test")
public class TestController {
    @Autowired
    TestServiceImpl testService;

    @Resource
    private UserService userService;

    /**
     * 处理 POST 请求 /test/h，使用 @RequestBody 接收 JSON 格式的请求体。
     *
     * @param param 包含 code 属性的 TestRequestDTO 对象。
     * @return 返回一个字符串，包含接收到的 code 值。
     */
    @PostMapping("/h")
    public String hello(@RequestBody TestRequestDTO param) {
        return "hello---" + testService.action(param.getCode());
    }

    /**
     * 处理 GET 请求 /test/h，使用 @RequestParam 接收查询参数。
     *
     * @param code 从 URL 查询字符串中获取的字符串参数。
     * @return 返回一个字符串，包含接收到的 code 值。
     */
    @GetMapping("/h")
    public String hello2(@RequestParam("code") String code) {
        return "RequestParam---" + testService.action(code);
    }

    /**
     * 处理 GET 请求 /test/user/{id}，使用 @PathVariable 接收路径参数。
     *
     * @param id 从 URL 路径中获取的长整型参数。
     * @return 返回一个 User 对象，对应指定的 id。
     */
    @GetMapping("/user/{id}")
    public User hello3(@PathVariable("id") Long id) {
        return userService.getUser(id);
    }

    /*
    * 获取user用户列表
    *
    * @return 返回user用户列表
    * */
    @GetMapping("/user")
    public List<User> getUserList() {
        return userService.getUserList();
    }
    /**
     * 添加user用户
     *
     * @param user user用户对象
     * @return 添加成功返回true，否则返回false
     * */
    @PostMapping("/addUser")
    public Result<User> addUser(@RequestBody User user) {
        return userService.addUser(user);
    }

    /**
     * 处理 POST 请求 /test/test，使用 @RequestBody 接收 JSON 格式的请求体。
     *
     * @param payload 包含 code 属性的 Map 对象。
     * @return 返回一个字符串，包含接收到的 code 值。
     */
    @PostMapping("/addCode")
    public String addCode(@RequestBody Map<String, Object> payload) {
        String code = (String) payload.get("code");
        return "add " + code + " success";
    }
}
